www.gusucode.com > tpframe PHP开发框架 v2.2PHP源码程序 > tpframe PHP开发框架 v2.2/tpframe_v2.2.0618/tpframe_v2.2.0618/theme/backend/assets/js/common.js
$.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; ;(function () { //全局ajax处理 $.ajaxSetup({ complete: function (jqXHR) {}, data: { }, error: function (jqXHR, textStatus, errorThrown) { //请求失败处理 } }); if ($.browser && $.browser.msie) { //ie 都不缓存 $.ajaxSetup({ cache: false }); } //不支持placeholder浏览器下对placeholder进行处理 if (document.createElement('input').placeholder !== '') { $('[placeholder]').focus(function () { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val(''); input.removeClass('placeholder'); } }).blur(function () { var input = $(this); if (input.val() == '' || input.val() == input.attr('placeholder')) { input.addClass('placeholder'); input.val(input.attr('placeholder')); } }).blur().parents('form').submit(function () { $(this).find('[placeholder]').each(function () { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val(''); } }); }); } // 所有加了dialog类名的a链接,自动弹出它的href if ($('a.js-dialog').length) { Wind.use('artDialog', 'iframeTools', function() { $('.js-dialog').on('click', function(e) { e.preventDefault(); var $this = $(this); art.dialog.open($(this).prop('href'), { close : function() { $this.focus(); // 关闭时让触发弹窗的元素获取焦点 return true; }, title : $this.prop('title') }); }).attr('role', 'button'); }); } // 所有的ajax form提交,由于大多业务逻辑都是一样的,故统一处理 var ajaxForm_list = $('form.js-ajax-form'); if (ajaxForm_list.length) { Wind.use('ajaxForm', 'artDialog','validate', function () { var $btn; $('button.js-ajax-submit').on('click', function (e) { var btn = $(this),form = btn.parents('form.js-ajax-form'); $btn=btn; if(btn.data("loading")){ return; } //批量操作 判断选项 if (btn.data('subcheck')) { btn.parent().find('span').remove(); if (form.find('input.js-check:checked').length) { var msg = btn.data('msg'); if (msg) { art.dialog({ id: 'warning', icon: 'warning', content: btn.data('msg'), cancelVal: '关闭', cancel: function () { //btn.data('subcheck', false); //btn.click(); }, ok: function () { btn.data('subcheck', false); btn.click(); } }); } else { btn.data('subcheck', false); btn.click(); } } else { $('<span class="tips_error">请至少选择一项</span>').appendTo(btn.parent()).fadeIn('fast'); } return false; } //ie处理placeholder提交问题 if ($.browser && $.browser.msie) { form.find('[placeholder]').each(function () { var input = $(this); if (input.val() == input.attr('placeholder')) { input.val(''); } }); } }); ajaxForm_list.each(function(){ $(this).validate({ //是否在获取焦点时验证 //onfocusout : false, //是否在敲击键盘时验证 onkeyup : function( element, event ) { return; // Avoid revalidate the field when pressing one of the following keys // Shift => 16 // Ctrl => 17 // Alt => 18 // Caps lock => 20 // End => 35 // Home => 36 // Left arrow => 37 // Up arrow => 38 // Right arrow => 39 // Down arrow => 40 // Insert => 45 // Num lock => 144 // AltGr key => 225 var excludedKeys = [ 16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225 ]; if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) { return; } else if ( element.name in this.submitted || element.name in this.invalid ) { this.element( element ); } }, //当鼠标掉级时验证 onclick : false, //给未通过验证的元素加效果,闪烁等 //highlight : false, showErrors:function(errorMap, errorArr){ try { $(errorArr[0].element).focus(); //alert(errorArr[0].message); } catch (err) { } }, submitHandler:function(form){ var $form=$(form); $form.ajaxSubmit({ url: $btn.data('action') ? $btn.data('action') : $form.attr('action'), //按钮上是否自定义提交地址(多按钮情况) dataType: 'json', type:"post", beforeSubmit: function (arr, $form, options) { $btn.data("loading",true); var text = $btn.text(); //按钮文案、状态修改 $btn.text(text + '中...').prop('disabled', true).addClass('disabled'); }, success: function (data, statusText, xhr, $form) { var text = $btn.text(); //按钮文案、状态修改 $btn.removeClass('disabled').prop('disabled', false).text(text.replace('中...', '')).parent().find('span').remove(); if (data.code === 0) { $('<span class="tips_success">' + data.msg + '</span>').appendTo($btn.parent()).fadeIn('slow').delay(1000).fadeOut(function () { }); } else if (data.code === 1) { var $verify_img=$form.find(".verify_img"); if($verify_img.length){ $verify_img.attr("src",$verify_img.attr("src")+"&refresh="+Math.random()); } var $verify_input=$form.find("[name='verify']"); $verify_input.val(""); $('<span class="tips_error">' + data.msg + '</span>').appendTo($btn.parent()).fadeIn('fast'); $btn.removeProp('disabled').removeClass('disabled'); } if (data.url && data.code === 1) { //返回带跳转地址 window.location.href = data.url; } else { if (data.code === 1) { //刷新当前页 reloadPage(window); } } }, error:function(xhr,e,statusText){ alert(statusText); //刷新当前页 //reloadPage(window); }, complete: function(){ $btn.data("loading",false); } }); } }); }); }); } // 直接提交数据,不通过validate验证数据,在有图片上传时会有问题 $(".js-ajax-button").click(function() { var $btn = $(".js-ajax-button"),$form = $(".js-ajax-form"); var formObject=$form.serializeObject(); // 对于ke-editor编辑器 if($form.find("textarea[class='ke-edit-textarea']").length && $form.find("textarea[class!='ke-edit-textarea']").length>0){ $.each($form.find("textarea[class!='ke-edit-textarea']"),function(k,v){ var key=$(v).attr("name"); formObject[key]=editors[k].html(); }); } $.ajax({ url: $btn.data('action') ? $btn.data('action') : $form.attr('action'), //按钮上是否自定义提交地址(多按钮情况) dataType: 'json', data: formObject,//$form.serialize(), type: "post", beforeSend: function(arr, $form, options) { $btn.data("loading", true); var text = $btn.text(); //按钮文案、状态修改 $btn.text(text + '中...').prop('disabled', true).addClass('disabled'); }, success: function(data, statusText, xhr) { var text = $btn.text(); //按钮文案、状态修改 $btn.removeClass('disabled').prop('disabled', false).text(text.replace('中...', '')).parent().find('span').remove(); if (data.code === 1) { $('<span class="tips_success">' + data.msg + '</span>').appendTo($btn.parent()).fadeIn('slow').delay(1000).fadeOut(function() { location.href = data.url; }); } else if (data.code === 0) { var $verify_img = $form.find("#captcha"); if ($verify_img.length) { $verify_img.attr("src", "/captcha.html?t=" + Math.random()); } $form.find("[name='verify']").val(""); $('<span class="tips_error">' + data.msg + '</span>').appendTo($btn.parent()).fadeIn('fast').fadeOut(1000); $btn.removeProp('disabled').removeClass('disabled'); } }, error: function(xhr, e, statusText) { alert(statusText); //刷新当前页 //reloadPage(window); }, complete: function() { $btn.data("loading", false); } }); }); // 文本框统一ajax处理 $(".ajax-text").each(function(){ var newval; $(this).change(function(){ newval=$(this).val(); var data=$(this).attr("data"),action=$(this).attr("action"); var dataArr=data.split("|"),table=dataArr[0],colum=dataArr[1],key=dataArr[2],keyval=dataArr[3]; $.ajax({ type:"post", dataType:"json", data:{"table":table,"colum":colum,"columval":newval,"key":key,"keyval":keyval}, url:action, success:function(data){ if(data.code==0){ alert(data.msg); } } }); }); }); // 统一状态ajax处理 $(".ajax-status").click(function(){ $this=$(this); var data=$(this).attr("data"),src=$(this).attr("src"),action=$(this).attr("action"); var dataArr=data.split("|"),table=dataArr[0],colum=dataArr[1],key=dataArr[2],keyval=dataArr[3]; var newval=src.indexOf("btn_enable.png")>0?0:1; $.ajax({ type:"post", dataType:"json", url:action, data:{"table":table,"colum":colum,"columval":newval,"key":key,"keyval":keyval}, beforeSend:function(obj){ $this.attr("src","/data/assets/images/btn_loading.gif"); }, success:function(data){ if(data.code==1){ if(src.indexOf("btn_enable.png")>0){ $this.attr("src","/data/assets/images/btn_disable.gif"); }else{ $this.attr("src","/data/assets/images/btn_enable.png"); } }else{ alert(data.msg); } } }); }); //dialog弹窗内的关闭方法 $('#js-dialog-close').on('click', function (e) { e.preventDefault(); try{ art.dialog.close(); }catch(err){ Wind.use('artDialog','iframeTools',function(){ art.dialog.close(); }); }; }); //所有的删除操作,删除数据后刷新页面 if ($('a.js-ajax-delete').length) { Wind.use('artDialog', function () { $('.js-ajax-delete').on('click', function (e) { e.preventDefault(); var $_this = this, $this = $($_this), href = $this.data('href'), msg = $this.data('msg'); href = href?href:$this.attr('href'); art.dialog({ title: false, icon: 'question', content:msg?msg: '确定要删除吗?', follow: $_this, close: function () { $_this.focus();; //关闭时让触发弹窗的元素获取焦点 return true; }, okVal:"确定", ok: function () { $.getJSON(href).done(function (data) { if (data.code == 1) { if (data.referer) { location.href = data.referer; } else { reloadPage(window); } } else if (data.code == 0) { //art.dialog.alert(data.info); //alert(data.info);//暂时处理方案 art.dialog({ content: data.info, icon: 'warning', ok: function () { this.title(data.info); return true; } }); } }); }, cancelVal: '关闭', cancel: true }); }); }); } if ($('a.js-ajax-dialog-btn').length) { Wind.use('artDialog', function () { $('.js-ajax-dialog-btn').on('click', function (e) { e.preventDefault(); var $_this = this, $this = $($_this), href = $this.data('href'), msg = $this.data('msg'); href = href?href:$this.attr('href'); if(!msg){ msg="您确定要进行此操作吗?"; } art.dialog({ title: false, icon: 'question', content: msg, follow: $_this, close: function () { $_this.focus();; //关闭时让触发弹窗的元素获取焦点 return true; }, ok: function () { $.getJSON(href).done(function (data) { console.log(data); if (data.code == 0) { if (data.url) { location.href = data.url; } else { art.dialog({ content: data.msg, icon: 'succeed', ok: function () { reloadPage(window); return true; }, }); } } else if (data.code == -1) { //art.dialog.alert(data.info); art.dialog({ content: data.msg, icon: 'warning', ok: function () { this.title(data.msg); return true; } }); }else{ art.dialog({ content: data.msg, icon: 'warning', ok: function () { this.title(data.msg); return true; } }); } }); }, cancelVal: '关闭', cancel: true }); }); }); } /*复选框全选(支持多个,纵横双控全选)。 *实例:版块编辑-权限相关(双控),验证机制-验证策略(单控) *说明: * "js-check"的"data-xid"对应其左侧"js-check-all"的"data-checklist"; * "js-check"的"data-yid"对应其上方"js-check-all"的"data-checklist"; * 全选框的"data-direction"代表其控制的全选方向(x或y); * "js-check-wrap"同一块全选操作区域的父标签class,多个调用考虑 */ if ($('.js-check-wrap').length) { var total_check_all = $('input.js-check-all'); //遍历所有全选框 $.each(total_check_all, function () { var check_all = $(this), check_items; //分组各纵横项 var check_all_direction = check_all.data('direction'); check_items = $('input.js-check[data-' + check_all_direction + 'id="' + check_all.data('checklist') + '"]'); //点击全选框 check_all.change(function (e) { var check_wrap = check_all.parents('.js-check-wrap'); //当前操作区域所有复选框的父标签(重用考虑) if ($(this).attr('checked')) { //全选状态 check_items.attr('checked', true); //所有项都被选中 if (check_wrap.find('input.js-check').length === check_wrap.find('input.js-check:checked').length) { check_wrap.find(total_check_all).attr('checked', true); } } else { //非全选状态 check_items.removeAttr('checked'); check_wrap.find(total_check_all).removeAttr('checked'); //另一方向的全选框取消全选状态 var direction_invert = check_all_direction === 'x' ? 'y' : 'x'; check_wrap.find($('input.js-check-all[data-direction="' + direction_invert + '"]')).removeAttr('checked'); } }); //点击非全选时判断是否全部勾选 check_items.change(function () { if ($(this).attr('checked')) { if (check_items.filter(':checked').length === check_items.length) { //已选择和未选择的复选框数相等 check_all.attr('checked', true); } } else { check_all.removeAttr('checked'); } }); }); } //日期选择器 var dateInput = $("input.js-date") if (dateInput.length) { Wind.use('datePicker', function () { dateInput.datePicker(); }); } //日期+时间选择器 var dateTimeInput = $("input.js-datetime"); if (dateTimeInput.length) { Wind.use('datePicker', function () { dateTimeInput.datePicker({ time: true }); }); } var yearInput = $("input.js-year"); if (yearInput.length) { Wind.use('datePicker', function () { yearInput.datePicker({ startView: 'decade', minView: 'decade', format: 'yyyy', autoclose: true }); }); } //tab var tabs_nav = $('ul.js-tabs-nav'); if (tabs_nav.length) { Wind.use('tabs', function () { tabs_nav.tabs('.js-tabs-content > div'); }); } })(); //重新刷新页面,使用location.reload()有可能导致重新提交 function reloadPage(win) { var location = win.location; location.href = location.pathname + location.search; } /** * 页面跳转 * @param url */ function redirect(url) { location.href = url; } /** * 读取cookie * @param name * @returns */ function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) == 0) { return c.substring(nameEQ.length, c.length); } } return null; } // 设置cookie function setCookie(name, value, days) { var argc = setCookie.arguments.length; var argv = setCookie.arguments; var secure = (argc > 5) ? argv[5] : false; var expire = new Date(); if(days==null || days==0) days=1; expire.setTime(expire.getTime() + 3600000*24*days); document.cookie = name + "=" + escape(value) + ("; path=/") + ((secure == true) ? "; secure" : "") + ";expires="+expire.toGMTString(); } /** * 打开iframe式的窗口对话框 * @param url * @param title * @param options */ function open_iframe_dialog(url, title, options) { var params = { title : title, lock : true, opacity : 0, width : "95%", height:'90%' }; params = options ? $.extend(params, options) : params; Wind.use('artDialog', 'iframeTools', function() { art.dialog.open(url, params); }); } /** * 打开地图对话框 * * @param url * @param title * @param options * @param callback */ function open_map_dialog(url, title, options, callback) { var params = { title : title, lock : true, opacity : 0, width : "95%", height : 400, ok : function() { if (callback) { var d = this.iframe.contentWindow; var lng = $("#lng_input", d.document).val(); var lat = $("#lat_input", d.document).val(); var address = {}; address.address = $("#address_input", d.document).val(); address.province = $("#province_input", d.document).val(); address.city = $("#city_input", d.document).val(); address.district = $("#district_input", d.document).val(); callback.apply(this, [ lng, lat, address ]); } } }; params = options ? $.extend(params, options) : params; Wind.use('artDialog', 'iframeTools', function() { art.dialog.open(url, params); }); } /** * 打开文件上传对话框 * @param dialog_title 对话框标题 * @param callback 回调方法,参数有(当前dialog对象,选择的文件数组,你设置的extra_params) * @param extra_params 额外参数,object * @param multi 是否可以多选 * @param filetype 文件类型,image,video,audio,file * @param app 应用名,对于 CMF 的应用名 */ function open_upload_dialog(dialog_title,callback,extra_params,multi,filetype,app){ multi = multi?1:0; filetype = filetype?filetype:'image'; app = app?app:GV.APP; var params = '&multi='+multi+'&filetype='+filetype+'&app='+app ; Wind.use("artDialog","iframeTools",function(){ art.dialog.open(GV.ROOT+'index.php?g=asset&m=asset&a=plupload' + params, { title: dialog_title, id: new Date().getTime(), width: '650px', height: '420px', lock: true, fixed: true, background:"#CCCCCC", opacity:0, ok: function() { if (typeof callback =='function') { var iframewindow = this.iframe.contentWindow; var files=iframewindow.get_selected_files(); if(files){ callback.apply(this, [this, files,extra_params]); }else{ return false; } } }, cancel: true }); }); } function upload_one(dialog_title,input_selector,filetype,extra_params,app){ open_upload_dialog(dialog_title,function(dialog,files){ $(input_selector).val(files[0].filepath); },extra_params,0,filetype,app); } function upload_one_image(dialog_title,input_selector,extra_params,app){ open_upload_dialog(dialog_title,function(dialog,files){ $(input_selector).val(files[0].filepath); $(input_selector+'-preview').attr('src',files[0].preview_url); $(input_selector+'-name').val(files[0].name); },extra_params,0,'image',app); } /** * 多图上传 * @param dialog_title 上传对话框标题 * @param container_selector 图片容器 * @param item_tpl_wrapper_id 单个图片html模板容器id */ function upload_multi_image(dialog_title,container_selector,item_tpl_wrapper_id,extra_params,app){ open_upload_dialog(dialog_title,function(dialog,files){ var tpl=$('#'+item_tpl_wrapper_id).html(); var html=''; $.each(files,function(i,item){ var itemtpl= tpl; itemtpl=itemtpl.replace(/\{id\}/g,item.id); itemtpl=itemtpl.replace(/\{url\}/g,item.url); itemtpl=itemtpl.replace(/\{preview_url\}/g,item.preview_url); itemtpl=itemtpl.replace(/\{filepath\}/g,item.filepath); itemtpl=itemtpl.replace(/\{name\}/g,item.name); html+=itemtpl; }); $(container_selector).append(html); },extra_params,1,'image',app); } /** * 查看图片对话框 * @param img 图片地址 */ function image_preview_dialog(img) { Wind.use("artDialog",function(){ art.dialog({ title: '图片查看', fixed: true, width:"420px", height: '420px', id:"image_preview_"+img, lock: true, background:"#CCCCCC", opacity:0, content: '<img src="' + img + '" />' }); }); } function artdialog_alert(msg){ Wind.use("artDialog", function() { art.dialog({ id : new Date().getTime(), icon : "error", fixed : true, lock : true, background : "#CCCCCC", opacity : 0, content : msg, ok : function() { return true; } }); }); } function open_iframe_layer(url,title,options){ var params = { type: 2, title: title, shadeClose: true, skin: 'layui-layer-nobg', shade: [0.5, '#000000'], area: ['90%', '90%'], content:url }; params = options ? $.extend(params, options) : params; Wind.css('layer'); Wind.use("layer", function() { layer.open(params); }); }